package edu.upc.cineplanet.repositoryjdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import edu.upc.cineplanet.Domain.Sala;
import edu.upc.cineplanet.Domain.UsuarioWeb;
import edu.upc.cineplanet.repository.CineRepository;
import edu.upc.cineplanet.repository.SalaRepository;

@Repository
public class SalaRepositoryJdbc extends JdbcDaoSupport implements SalaRepository {

	@Autowired
	CineRepository cineRepository;
	
	@Autowired
	public SalaRepositoryJdbc(DataSource dataSource){
		setDataSource(dataSource);
	}
	
	public List<Sala> obtenerSalas() {
		
		List<Sala> salas = new ArrayList<Sala>();
		
		String sql = " SELECT CO_CINE,CO_SALA, NO_SALA, NU_CAPACIDAD, NO_TIPOSALA FROM SALA";
		salas = getJdbcTemplate().query(sql, new SalaRowMapper());
		
		return salas;
	}	
	
	private class SalaRowMapper implements ParameterizedRowMapper<Sala>{		
		public Sala mapRow(ResultSet rs, int rowNum) throws SQLException{
			Sala p = new Sala();
			p.setCine( cineRepository.buscarCine(rs.getString("CO_CINE")) );
			p.setCodigoSala(rs.getString("CO_SALA"));
			p.setNombreSala(rs.getString("NO_SALA"));
			p.setCapacidad(rs.getInt("NU_CAPACIDAD"));
			p.setNombreTipoSala(rs.getString("NO_TIPOSALA"));
			
			return p;		
		}		
	}	
	
	public String mostrarSalas(){
		String lista="";		
		int registro=1;
		Iterator<Sala> itr = obtenerSalas().iterator();		
		while (itr.hasNext()){
		    Sala usua = itr.next();
		    lista = lista + registro+ " "+ usua.getCine().getCodigoCine()+" " + usua.getCodigoSala()+" "+ usua.getNombreSala() +" "+ usua.getNombreTipoSala()  + "\n" ;
		    registro++;
		}		
		return lista;
	}	
		
	public String creaCodigo(Sala usu) {
		String codigo;
		String nuevo_codigo;
		String sql = "SELECT (MAX(U.CO_SALA)+1) FROM SALA U";
		codigo = getJdbcTemplate().queryForObject(sql, String.class);
		
		nuevo_codigo = codigo;
		int tam = 0,diff = 0;
		if(codigo.length() < 2){
			tam = codigo.length();	
			diff = 2-tam;
			while(diff>0){
				nuevo_codigo = "0"+nuevo_codigo ;
				diff--;
			}						
		}
		return nuevo_codigo;
	}
	
}
